35 analyses · 98 routes · 62 charts · January 2019 – November 2025 · 7,651 monthly observations
PRT on-time performance has declined over the seven-year window. Trip-weighted system OTP started around 69% in early 2019, spiked briefly to 77% in March 2020 (COVID-era low ridership), then fell steadily to a trough of 60% in September 2022. It has since stabilized in the 63–65% range through late 2025, but has not recovered to pre-COVID levels. A bus-only stratification confirms the decline is not an artifact of mixing modes – the bus-only trend closely tracks the all-mode average (gap averages ~0.5 pp) because bus routes dominate the system (90+ of ~93 reporting).
Weights now use time-varying scheduled trip counts from WPRDC for Jan 2019 – Mar 2021 (27 months), falling back to static MAX(trips_7d)/7 from route_stops for later months. This fixes the previous SUM-across-stops conflation with route length and the static-weights-across-7-years problem. The weighted and unweighted averages now track very closely (~0.1 pp gap), confirming the previous ~2-3 pp gap was an artifact of the SUM-based weight inflation, not a genuine high-frequency penalty. Route count ranges from 68 to 96 across months; five routes (37, 42, P2, RLSH, SWL) are excluded from the weighted average due to missing weight data.
PRT on-time performance has declined over the 2019–2025 window and has not recovered to pre-COVID levels. A bus-only stratification confirms the decline is not an artifact of mixing modes – bus trends closely track the all-mode average.
scheduled_trips_monthly nor route_stops. These routes still contribute to the unweighted average.The central finding – that PRT OTP declined from ~69% to ~60% and has stabilized around 63–65% without recovering – is robust to the weighting methodology change. The overall trend shape (pre-COVID baseline, COVID spike, sustained decline, plateau) is visible in both weighted and unweighted series.
The collapse of the weighted-unweighted gap from ~2-3 pp to ~0.1 pp is itself a notable finding. The previous gap was interpreted as evidence that "high-frequency routes perform worse than low-frequency ones." This was wrong: it was an artifact of the SUM-across-stops weight, which inflated the weights of routes with many stops (i.e., long routes), not high-frequency routes. Once weights correctly reflect trip frequency (via WPRDC scheduled counts or MAX-based proxy), the weighted and unweighted averages converge, meaning route frequency does not systematically predict OTP at the system level. This is consistent with the null result from Analysis 10 (cross-sectional) and Analysis 30 (longitudinal panel).
The time-varying weights for the first 27 months (Jan 2019 – Mar 2021) capture real service changes, including the COVID-era cuts that reduced weekday trips by 31% between March and April 2020. This means the weighted OTP for 2020–2021 reflects actual service levels rather than retroactively applying today's schedule. The static fallback for later months remains a limitation – if PRT restructured service significantly after March 2021, those changes are not captured. Extending the WPRDC data or obtaining historical GTFS archives would close this gap.
The bus-only stratification confirms that system trends are driven by bus performance. Rail's higher OTP (~84%) lifts the all-mode average by only ~0.5 pp because bus routes represent >96% of the reporting routes. Any policy intervention to improve system OTP must focus on bus operations.
Replaced static SUM(trips_7d) weighting with time-varying daily_trips from WPRDC scheduled trip counts (Jan 2019 – Mar 2021) and MAX(trips_7d)/7 static fallback for later months. This fixes Methodology Issues #1 (SUM conflation with route length) and #2 (static weights across 7 years). The weighted-unweighted gap collapsed from ~2-3 pp to ~0.1 pp, confirming the old gap was an artifact of the SUM-based weight inflation, not a genuine high-frequency penalty.
Light rail (RAIL) consistently outperforms bus, averaging 84% OTP vs 69% for BUS system-wide (Mann-Whitney U = 6,563, p < 0.001, n = 83 months). Trip-weighted bus OTP (66.8%) is ~2 pp below the unweighted average (68.9%), confirming that higher-frequency bus routes tend to perform worse. The Incline has no OTP data (see Analysis 09). Five UNKNOWN-mode routes are excluded. Among bus subtypes:
| Bus Type | Avg OTP | Notes |
|---|---|---|
| Busway (P1, P3, G2) | 71–76% | Dedicated right-of-way helps |
| Flyer (P/G/O prefix) | ~70% | Park-and-ride express services |
| Limited (L suffix) | ~72% | Fewer stops than local counterparts |
| Express (X suffix) | ~70% | Highway-dependent, variable |
| Local | 63–69% | Largest category, lowest performance |
Two paired-route comparisons were found (51/51L, 53/53L). On average, the limited variant outperforms its local counterpart by +3.5 percentage points (paired t-test: t = 7.37, p < 0.001, 95% CI: [+2.5, +4.4 pp], n = 85 paired monthly observations). The sample of only 2 route pairs limits generalizability.
The RAIL–BUS gap has been roughly stable over time, suggesting that the system-wide OTP decline affects both modes proportionally.
Light rail consistently outperforms bus by a wide margin, and the difference is statistically significant (Mann-Whitney U = 6,563, p < 0.001). Among bus routes, dedicated right-of-way (busway) routes perform nearly as well as rail, and limited-stop variants beat their local counterparts.
| Mode / Type | Avg OTP (unweighted) | Avg OTP (trip-weighted) | Route Count |
|---|---|---|---|
| RAIL | 84% | 84% | 3 |
| Busway (P1, P3, G2) | 71–76% | – | 3 |
| Flyer (P/G/O prefix) | ~70% | – | ~16 |
| Limited (L suffix) | ~72% | – | varies |
| Express (X suffix) | ~70% | – | varies |
| Local bus | 63–69% | – | ~60 |
route_stops data.94 routes had enough data (12+ months) to rank. Rankings use trailing 12-month average OTP to reflect current performance, and post-2022 slope (with 95% CIs via scipy.stats.linregress) to capture recent trajectory without COVID distortion. 51 of 94 slopes are statistically significant. 4 routes were excluded for insufficient data. Routes are ranked both overall and within their mode (BUS, RAIL, UNKNOWN).
Caution – Regression to the Mean: Extreme-ranked routes (top/bottom performers, most-improving/declining) are expected to regress toward the mean in subsequent periods. These lists identify current outliers, not necessarily future ones.
Best performers (by trailing 12-month OTP):
| Route | Mode | Mode Rank | Recent OTP | All-Time OTP |
|---|---|---|---|---|
| G2 - West Busway | BUS | 1/89 | 88.4% | 81.7% |
| 18 - Manchester | BUS | 2/89 | 87.5% | 88.4% |
| P1 - East Busway-All Stops | BUS | 3/89 | 83.9% | 84.5% |
| 39 - Brookline | BUS | 4/89 | 82.6% | 78.9% |
Worst performers:
| Route | Mode | Mode Rank | Recent OTP | All-Time OTP |
|---|---|---|---|---|
| 71B - Highland Park | BUS | 89/89 | 41.9% | 58.8% |
| 61C - McKeesport-Homestead | BUS | 88/89 | 44.8% | 56.8% |
| 65 - Squirrel Hill | BUS | 87/89 | 46.5% | 61.5% |
| 58 - Greenfield | BUS | 86/89 | 49.8% | 60.8% |
Most improving (post-2022, statistically significant): P78 - Oakmont Flyer (+6.6 pp/yr, CI [+5.0, +8.2]), 71D - Hamilton (+4.1 pp/yr, CI [+2.5, +5.7]). Most declining (post-2022, statistically significant): 65 - Squirrel Hill (-8.3 pp/yr, CI [-11.7, -4.9]), 71B - Highland Park (-7.2 pp/yr, CI [-8.8, -5.5]). Note: SWL (Outbound to SHJ) has a point estimate of -10.4 pp/yr but its CI includes zero due to only 13 observations over 21 months.
3 routes were flagged as high-volatility (standard deviation more than 2x the median), indicating wild month-to-month swings rather than stable performance. 5 routes lack stop count data due to missing route_stops entries.
94 routes had sufficient data (12+ months) to rank. Rankings use trailing 12-month average OTP to reflect current performance, and post-2022 slope to capture recent trajectory without COVID distortion. Slopes now include 95% confidence intervals via scipy.stats.linregress; 51 of 94 slopes are statistically significant (CI excludes zero). 3 routes were flagged as high-volatility. Routes are ranked both overall and within their mode (BUS, RAIL, UNKNOWN).
Caution: Extreme-ranked routes – both top/bottom performers and most-improving/declining – are expected to regress toward the mean in subsequent periods. This is a statistical phenomenon, not an operational one: routes that happen to have unusually good or bad stretches will tend to look less extreme next time, even without any intervention. Rankings should be interpreted as snapshots, not predictions. A route appearing at the top or bottom of a list does not necessarily mean it will stay there. Formal empirical Bayes shrinkage could partially correct for this, but is beyond the scope of this analysis. Readers should weight these rankings accordingly, especially for routes with fewer observations or higher volatility.
| Route | Mode | Mode Rank | Recent OTP | All-Time OTP | Stops |
|---|---|---|---|---|---|
| G2 - West Busway | BUS | 1/89 | 88.4% | 81.7% | 24 |
| 18 - Manchester | BUS | 2/89 | 87.5% | 88.4% | 43 |
| P1 - East Busway-All Stops | BUS | 3/89 | 83.9% | 84.5% | 24 |
| 39 - Brookline | BUS | 4/89 | 82.6% | 78.9% | 69 |
| 43 - Bailey | BUS | 5/89 | 81.8% | 79.5% | 65 |
All top 5 are BUS routes. The 3 RAIL routes rank 9th (SLVR, 78.8%), 12th (BLUE, 77.4%), and 30th (RED, 72.8%) overall.
| Route | Mode | Mode Rank | Recent OTP | All-Time OTP | Stops |
|---|---|---|---|---|---|
| 71B - Highland Park | BUS | 89/89 | 41.9% | 58.8% | 107 |
| 61C - McKeesport-Homestead | BUS | 88/89 | 44.8% | 56.8% | 158 |
| 65 - Squirrel Hill | BUS | 87/89 | 46.5% | 61.5% | 70 |
| 58 - Greenfield | BUS | 86/89 | 49.8% | 60.8% | 102 |
| 61B - Braddock-Swissvale | BUS | 85/89 | 50.1% | 58.4% | 137 |
Slopes are computed via OLS with standard errors. Only statistically significant slopes (95% CI excludes zero) are listed below. 43 of 94 routes have slopes that are not statistically significant – their trend cannot be distinguished from flat.
Most improving (statistically significant):
| Route | Slope (pp/yr) | 95% CI | Months |
|---|---|---|---|
| P78 - Oakmont Flyer | +6.6 | [+5.0, +8.2] | 47 |
| 71D - Hamilton | +4.1 | [+2.5, +5.7] | 47 |
| O1 - Ross Flyer | +3.4 | [+2.1, +4.6] | 47 |
| 39 - Brookline | +3.2 | [+0.9, +5.5] | 45 |
| G31 - Bridgeville Flyer | +2.6 | [+1.6, +3.6] | 47 |
Most declining (statistically significant):
| Route | Slope (pp/yr) | 95% CI | Months |
|---|---|---|---|
| 65 - Squirrel Hill | -8.3 | [-11.7, -4.9] | 46 |
| 71B - Highland Park | -7.2 | [-8.8, -5.5] | 47 |
| P12 - Holiday Park Flyer | -5.8 | [-7.4, -4.2] | 47 |
| 81 - Oak Hill | -5.8 | [-7.3, -4.3] | 47 |
| 61C - McKeesport-Homestead | -5.4 | [-6.6, -4.2] | 47 |
Notable non-significant slopes: SWL (Outbound to SHJ) has a point estimate of -10.4 pp/yr but its 95% CI is [-34.7, +13.8] due to having only 13 observations over a 21-month span – the apparent steep decline cannot be statistically distinguished from zero.
Most routes with slopes have the full 47-month post-2022 span. Two routes have notably narrow observation windows:
Routes with narrow spans may have slopes that are less representative of sustained trends.
5 routes lack stop count data because they have no entries in the route_stops table: SWL (Outbound to SHJ), 37 (Castle Shannon), 42 (Potomac), P2 (East Busway Short), and RLSH (Red Line Shuttle). Stop counts for these routes are reported as null.
89 Pittsburgh-area neighborhoods were analyzed (3,760 of 6,466 stops excluded due to missing neighborhood data). OTP is now computed from route-level averages (each route weighted once regardless of how many months of data it has), weighted by trip frequency, with a minimum 12-month data requirement. There is a 25 percentage-point spread between the best- and worst-served neighborhoods (all modes pooled), narrowing to 20 pp for bus-only:
Worst-served neighborhoods:
Best-served neighborhoods:
Bus-only stratification reveals Simpson's paradox: Bon Air drops from rank 13 (pooled) to rank 53 (bus-only) because its high pooled OTP is driven by rail, not bus service. Beechview similarly drops 9 positions. The bottom neighborhoods are all-bus and unaffected.
The best-performing neighborhoods tend to be served by rail or busway routes (Overbrook and Beechview are on the light rail T line). The worst-performing neighborhoods are served primarily by high-frequency local bus routes with many stops. Neighborhood OTP estimates vary in precision (1 to 74 routes per neighborhood), so the 25 pp spread should be interpreted with that context. The equity gap between the top and bottom quintiles has remained roughly stable over time – all quintiles rise and fall together with the system, meaning the disparity is structural rather than worsening.
There is a 25 percentage-point spread in OTP between the best- and worst-served neighborhoods (all modes pooled). When restricted to bus-only, the spread narrows to 20 pp but the bottom neighborhoods remain the same. The disparity is structural and stable over time – all neighborhoods rise and fall together with the system. OTP is now computed from route-level averages (each route weighted once regardless of how many months of data it has), weighted by trip frequency.
| Neighborhood | Municipality | OTP (pooled) | OTP (bus-only) | Routes |
|---|---|---|---|---|
| Regent Square | Pittsburgh | 58.8% | 58.8% | 4 |
| Bluff | Pittsburgh | 59.2% | 59.2% | 16 |
| Crawford-Roberts | Pittsburgh | 61.4% | 61.4% | 7 |
| Squirrel Hill North | Pittsburgh | 61.6% | 61.6% | 12 |
| Highland Park | Pittsburgh | 61.9% | 61.9% | 5 |
The bottom neighborhoods are served entirely by bus, so their pooled and bus-only OTP are identical.
| Neighborhood | Municipality | OTP (pooled) | OTP (bus-only) | Routes (all) | Routes (bus) |
|---|---|---|---|---|---|
| Overbrook | Pittsburgh | 83.9% | 78.9% | 3 | 1 |
| Beechview | Pittsburgh | 80.7% | 75.5% | 3 | 2 |
| Brookline | Pittsburgh | 79.2% | 78.7% | 4 | 2 |
| Sheraden | Pittsburgh | 79.0% | 79.0% | 6 | 6 |
| Windgap | Pittsburgh | 78.9% | 78.9% | 2 | 2 |
Restricting to BUS-mode routes reveals that some neighborhoods' high pooled OTP is driven by rail:
| Neighborhood | Pooled OTP | Bus-Only OTP | Pooled Rank | Bus Rank | Shift |
|---|---|---|---|---|---|
| Bon Air | 75.3% | 66.7% | 13 | 53 | -40 |
| North Shore | 74.5% | 70.7% | 17 | 36 | -19 |
| Beechview | 80.7% | 75.5% | 2 | 11 | -9 |
Bon Air is a clear case of Simpson's paradox: it appears well-served in the pooled analysis (rank 13) but drops to rank 53 (bus-only) because its high pooled OTP is driven almost entirely by rail service. Beechview similarly drops 9 positions.
The bus-only spread (20 pp) is narrower than the pooled spread (25 pp), confirming that rail inflates the apparent equity of neighborhoods it serves.
Comparing trip-weighted OTP to unweighted (equal weight per route) reveals where high-frequency service diverges from the route average:
| Neighborhood | Weighted | Unweighted | Gap |
|---|---|---|---|
| Carrick | 71.1% | 77.2% | -6.1% |
| Troy Hill | 72.4% | 66.7% | +5.7% |
| Regent Square | 58.8% | 64.1% | -5.4% |
trips_7d, not historical ridership. Neighborhoods where service was cut would show current-frequency weights, not past ones.hood field had some invalid values (e.g., "0") that were filtered out.842 anomalous months were flagged across 94 routes using a two-sided rolling z-score method with a lagged window (current month excluded from baseline, preventing self-dampening of z-scores). Both drops and spikes are detected. The routes with the most anomalies:
| Route | Anomalies | Notes |
|---|---|---|
| 79 - East Hills | 18 | Persistent instability |
| 19L - Emsworth Limited | 16 | Limited-stop route |
| RED - Castle Shannon via Beechview | 15 | Rail line with high variability |
| 54 - North Side-Oakland-South Side | 15 | Long cross-city route |
| 28X - Airport Flyer | 14 | Express route |
Anomaly rates vary by mode: BUS 11.8%, RAIL 14.3%, UNKNOWN 15.5%. RAIL's higher rate reflects its normally-consistent performance – even moderate dips trigger the 2-sigma threshold. With 7,076 evaluated observations, the expected false-positive rate under normality is ~322 (~4.6%); the actual 842 anomalies (2.6x expected) indicates most are genuine, though ~300-350 could be chance alone. The lagged window also introduces trend bias: declining routes are more likely to trigger negative anomalies because the baseline is always slightly stale. 4 routes with fewer than 7 months of data are excluded from detection.
The COVID period (March–June 2020) generated positive anomalies across many routes as reduced ridership temporarily improved schedule adherence. The late 2022 cluster of negative anomalies across many routes may indicate a system-wide disruption (staffing, construction, or service restructuring).
842 anomalous months were flagged across 94 routes using a rolling z-score method with a lagged window (current month excluded from the baseline). The detection is two-sided, flagging both sharp drops and spikes. Anomalies cluster in time (COVID, late 2022) rather than being randomly distributed, suggesting system-wide shocks.
The anomaly detector uses a 12-month rolling window shifted by one month, so the current observation is never included in its own baseline. This prevents self-dampening of z-scores and produces more sensitive detection (842 anomalies vs. 406 with the unshifted approach). When the rolling standard deviation is near zero (constant OTP over the window), z-scores are set to 0.0 to avoid division-by-zero artifacts.
| Route | Anomalies |
|---|---|
| 79 - East Hills | 18 |
| 19L - Emsworth Limited | 16 |
| RED - Castle Shannon via Beechview | 15 |
| 54 - North Side-Oakland-South Side | 15 |
| 28X - Airport Flyer | 14 |
| Mode | Anomalies | Total Months | Rate |
|---|---|---|---|
| BUS | 801 | 6,794 | 11.8% |
| RAIL | 32 | 224 | 14.3% |
| UNKNOWN | 9 | 58 | 15.5% |
RAIL routes show a slightly higher anomaly rate (14.3%) despite consistently high OTP. This is because their performance is normally very stable, so even moderate dips trigger the 2-sigma threshold. The 5 UNKNOWN-mode routes (RLSH, P2, 42, SWL, 37) are included in the analysis; most have very few months of data.
With 7,076 evaluated route-month observations and a 2-sigma two-sided threshold, the expected false-positive rate under normality is approximately 4.6%, yielding ~322 expected false positives. The actual count of 842 anomalies is 2.6x the null expectation, indicating that a substantial majority of flagged anomalies reflect genuine OTP deviations beyond what random variation would produce. However, roughly 300-350 of the 842 could be expected by chance alone, so not every flagged anomaly should be interpreted as a "real" event.
The lagged rolling window introduces a systematic bias for trending routes. When a route's OTP is declining, the baseline (computed from the prior 12 months) is always slightly above the current value, making negative anomalies more likely. Conversely, improving routes are biased toward positive anomalies. This means the anomaly detector is more sensitive to deviations in the direction of the trend. No detrending is applied, so some fraction of flagged anomalies may reflect gradual trends rather than abrupt shocks.
4 routes were excluded from anomaly detection because they have fewer than 7 months of data (the rolling window requires shift(1) + min_samples=6):
| Route | Months |
|---|---|
| 37 - Castle Shannon | 3 |
| 53 - Homestead Park | 2 |
| 42 - Potomac | 3 |
| RLSH - Red Line Shuttle | 3 |
PRT shows a consistent seasonal cycle after detrending (removing 12-month rolling mean), using a balanced panel of 93 routes present in all 12 months-of-year over complete calendar years (2019–2024):
This is somewhat counterintuitive – winter months outperform summer/fall despite weather. Possible explanations: lower ridership in winter reduces dwell time and crowding delays; summer construction seasons create detours; school-year schedules in fall increase congestion.
93 routes had sufficient data (3+ years) for route-level seasonal analysis. Most have a seasonal amplitude under 15%. The most seasonally affected routes are 15 (Charles, 15.8%), O5 (Thompson Run Flyer, 15.2%), and P2 (East Busway Short, 14.8%). Red-team review confirmed the pattern holds after correcting for route composition bias (winter-only routes with high OTP) and unbalanced year coverage.
PRT shows a consistent seasonal cycle with winter months outperforming summer/fall. The system-wide seasonal swing is about 6.8 percentage points after detrending. 93 routes had sufficient data (3+ years) for route-level seasonal analysis.
Computed from a balanced panel of 93 routes (present in all 12 months-of-year) over complete calendar years (2019–2024).
| Month | Weighted OTP | Deviation from Trend |
|---|---|---|
| January | 70.8% | +2.8 pp (Best) |
| February | 68.9% | +1.0 pp |
| March | 69.9% | +2.1 pp |
| April | 68.1% | +0.3 pp |
| May | 67.4% | -0.4 pp |
| June | 66.7% | -1.1 pp |
| July | 68.1% | -0.2 pp |
| August | 67.2% | -1.1 pp |
| September | 64.4% | -3.9 pp (Worst) |
| October | 66.9% | -1.3 pp |
| November | 68.4% | +0.2 pp |
| December | 69.6% | +1.4 pp |
Seasonal profiles are computed by first removing a 12-month centered rolling mean (trend), then averaging the detrended residuals by month-of-year. This ensures that long-term trends (e.g., the COVID dip) do not distort the seasonal pattern. Route-level analysis requires at least 3 years of data to ensure each month-of-year is represented multiple times.
Red-team corrections applied (2026-02-10):
trips_7d weighting is a static snapshot and may not reflect historical service levels. The seasonal pattern holds in both weighted and unweighted averages, so the core finding is robust to weighting choice.| Route | Seasonal Amplitude |
|---|---|
| 15 - Charles | 15.8% |
| O5 - Thompson Run Flyer via 279 | 15.2% |
| P2 - East Busway Short | 14.8% |
trips_7d weighting reflects a single point-in-time snapshot of service frequency, not historical values. Route frequencies likely changed over the study period (especially during COVID).There is a moderately strong negative correlation between the number of stops on a route and its average OTP (routes with fewer than 12 months of data excluded):
The bus-only result rules out Simpson's paradox – the effect is not an artifact of mixing BUS and RAIL modes. Routes with fewer than 50 stops consistently achieve 80%+ OTP, while routes with 150+ stops struggle to reach 60%. This is the clearest structural predictor of OTP in the dataset. Note: stop counts come from the current route_stops snapshot while OTP is averaged across all historical months, so routes that changed stop configurations have a temporal mismatch.
There is a moderately strong negative correlation between the number of stops on a route and its average OTP. This finding holds for both all routes and bus-only analysis, ruling out Simpson's paradox as a confounder.
Routes with fewer than 12 months of OTP data are excluded to avoid noisy averages from sparse observations.
Stop consolidation – reducing the number of stops on long routes – is a common transit strategy for improving schedule adherence. This data strongly supports that approach for PRT's worst-performing routes.
route_stops snapshot while OTP is averaged across all historical months (2019–2025). Routes that changed stop configurations during this period have a mismatch between their current stop count and earlier OTP observations. This is inherent to the available data and cannot be corrected without historical stop-count snapshots.all_n tracking, replaced manual regression with linregress, added min-n guard, updated METHODS.md for Pearson+Spearman.6,212 stops were mapped with route-weighted OTP values (a derived metric: each stop inherits the average OTP of routes serving it, weighted by trip frequency – not independently measured stop performance). Routes with fewer than 12 months of data are excluded. Geographic patterns:
The worst-performing stops (55.8% OTP) are exclusively served by Route 77 (Penn Hills). The best-performing stops (88.4%) are served exclusively by Route 18 (Manchester) – a genuinely high-performing bus route, not rail. The system average in the chart is an unweighted stop-level average.
An interactive version of this map is available as a companion file: hotspot_map.html
Stop-level OTP is a derived metric: each stop inherits the average OTP of the routes serving it, weighted by trip frequency (trips_7d). It reflects route composition at each stop, not independently measured stop-level performance. A stop served by a single high-OTP route will appear "high-performing" even if that stop is a chronic delay point on that route. Conversely, a stop served by many routes will reflect the blended average of those routes.
6,212 stops were mapped with route-weighted OTP (after excluding 2 stops with null/NaN OTP due to zero total trips, and excluding routes with fewer than 12 months of data). Poor performance clusters in eastern Pittsburgh (Penn Hills, Squirrel Hill, Highland Park), while the best performance follows the light rail and busway corridors.
The best-performing stops (88.4%) are all served exclusively by BUS routes – specifically Route 18 (Manchester). The high-OTP corridor along the T line reflects rail's structural advantage (dedicated right-of-way), not independently measured stop performance. When interpreting the map:
The Monongahela Incline (route MI) is a data pipeline artifact. It exists in the routes table with mode=INCLINE and has 2 associated stops (Upper and Lower stations, 78 weekday trips), but has zero entries in the OTP table. OTP was never measured or reported for this route. The same is true for the Duquesne Incline (route DQI). Both inclines are physically operational and appear in the GTFS feed, but were excluded from whatever OTP measurement system generated this dataset.
The Monongahela Incline is a data pipeline artifact. It appears in the route catalog but has zero OTP measurements. OTP was never recorded for either of Pittsburgh's two inclines.
| Table | MI Records | Details |
|---|---|---|
routes | 1 row | route_id=MI, mode=INCLINE |
otp_monthly | 0 rows | No OTP data whatsoever |
route_stops | 2 rows | Upper Station, Lower Station (78 weekday trips, 549 weekly) |
stops | 2 Incline stops | W15307 (Upper, Mount Washington), W15308 (Lower, South Shore) |
stop_reference | 4 Incline stops | Both inclines present historically (first_served=1503, last_served=2510) |
routes table with mode=INCLINE, but neither has any OTP data.routes_by_month.csv) simply does not cover incline routes. This is likely because inclines run on a fixed schedule with no traffic interference, making OTP measurement less meaningful.This is not a data quality issue to fix. The inclines were included in the route catalog because they're part of PRT's GTFS feed, but were excluded from OTP measurement, likely by design. No further action needed.
There is no meaningful correlation between peak weekday trip frequency and OTP:
The previous finding (r = -0.39) was an artifact of using SUM(trips_wd) across all stops, which conflated trip frequency with route length (stop count). After correcting to MAX(trips_wd) (peak frequency at any single stop), the correlation vanishes entirely. Running more trips per se does not degrade OTP – the real driver is route complexity (stop count), not service volume. Routes with fewer than 12 months of OTP data are excluded. Three correlation tests were run without multiple-comparison correction; all are non-significant.
There is no meaningful correlation between peak weekday trip frequency and OTP. The previous finding (r = -0.39) was an artifact of using SUM(trips_wd) across stops, which conflated frequency with route length. After correcting to MAX(trips_wd) (peak frequency at any single stop), the correlation vanishes.
The original analysis summed trips_wd across all stops on a route. Because trips_wd is recorded per stop, a route with 50 trips per day and 100 stops produces a sum of ~5,000, while a route with 50 trips per day and 20 stops produces ~1,000. This made the metric a proxy for frequency x stop_count rather than pure frequency. Using MAX(trips_wd) isolates the peak trip frequency at the busiest stop, which is a better measure of how often the route actually runs.
PRT should not expect OTP penalties from increasing service frequency on existing routes. The capacity to run more trips does not inherently strain schedule adherence. The real lever for improving OTP is route design (stop count, right-of-way), not service volume.
trips_wd in route_stops represents current weekday frequency, not historical. Frequency may have changed over the analysis period.MAX(trips_wd) captures the peak stop, which for short-turn routes may overstate the frequency experienced by riders at outer stops.The correlation between directional trip imbalance and OTP is weak and not statistically significant (r = -0.12, p = 0.26, n = 90). After correcting the methodology to include bidirectional (IB,OB) stops in both directions and exclude one-direction-only routes, PRT routes show very little asymmetry – the most asymmetric route (19L) has only a 7.7% imbalance (7 vs 6 trips). The previous finding of routes with 100% asymmetry (Routes 11 and 60) was a data artifact. Including IB,OB stops in both directions can compress asymmetry toward zero when such a stop has the highest trip count, which is a known limitation. Routes with fewer than 12 months of OTP data are excluded. Three correlation tests were run without multiple-comparison correction; all are non-significant. This hypothesis did not yield actionable findings.
The correlation between directional trip imbalance and OTP is weak and not statistically significant (r = -0.12, p = 0.26). After correcting methodology issues in the original analysis, PRT routes show very little directional asymmetry, and what asymmetry exists does not predict OTP.
The original analysis used SUM(trips_wd) per direction and excluded stops with direction = 'IB,OB'. This inflated asymmetry because IB,OB stops (common on shared corridors) were dropped rather than counted in both directions. Routes 11 and 60 appeared 100% asymmetric because their IB stops were all coded as IB,OB. The corrected analysis uses MAX(trips_wd) per direction (peak frequency, not total stop-visits), includes IB,OB stops in both directions, and excludes routes present in only one direction.
| Route | IB Trips | OB Trips | Asymmetry | OTP |
|---|---|---|---|---|
| 19L - Emsworth Limited | 7 | 6 | 0.077 | 66.0% |
| 67 - Monroeville | 27 | 25 | 0.038 | 60.4% |
| 29 - Robinson | 22 | 21 | 0.023 | 65.1% |
Directional imbalance does not predict OTP. PRT routes are sufficiently balanced that this is not a measurable factor in schedule adherence. The hypothesis that scheduling asymmetry creates operational strain is not supported by this data.
MAX(trips_wd)) at a single stop per direction, which may not capture all scheduling nuances.route_stops data reflects current service, not historical. Historical asymmetry may have differed.trips_wd for a route. In that case, both IB and OB MAX values equal the same number, mechanically forcing asymmetry to zero. This is a known limitation – the alternative (excluding IB,OB stops) creates the opposite bias by dropping data.Geographic span (max distance between any two stops) is a moderate negative predictor of OTP within bus routes (r = -0.38, p < 0.001), stronger than the pooled all-mode result (r = -0.32) which was muted by Simpson's paradox. Stop count is the stronger factor:
Stop density (stops per km) shows no correlation with OTP (r = 0.04). Both route length and stop count independently degrade OTP, but stop consolidation is the higher-leverage intervention – roughly twice the impact of shortening routes.
Geographic span (the maximum distance between any two stops on a route) is a moderate negative predictor of OTP within bus routes (r = -0.38, p < 0.001), but stop count remains the stronger predictor after controlling for the other. Partial correlation analysis disentangles the two: stop count predicts OTP even after controlling for span (partial r = -0.41, p < 0.001), while span's independent contribution is smaller (partial r = -0.23, p = 0.03).
Both stop count and route distance independently degrade OTP, but stop consolidation is the higher-leverage intervention. Shortening routes would help modestly, but eliminating stops on existing routes would have roughly twice the impact per unit of change.
After detrending (subtracting system-wide monthly mean), hierarchical clustering on pairwise OTP correlations produced 6 clusters (silhouette-optimized, k=6, score=0.178). Detrending removes the dominant COVID/seasonal signal. The resulting clusters show moderate separation: the best cluster (9 routes, 74.0% OTP) and worst (23 routes, 66.8% OTP) differ by 7.2 pp. Low silhouette scores indicate the cluster structure is suggestive rather than definitive. Without depot or corridor data, we cannot confirm what drives co-movement.
After detrending (subtracting system-wide monthly mean OTP), hierarchical clustering on pairwise OTP correlations produced 6 clusters (selected by silhouette score optimization). Detrending removes the dominant COVID/seasonal signal that otherwise causes all routes to appear positively correlated, revealing genuine differential behavior.
| Cluster | Routes | Avg OTP | Avg Stops | Character |
|---|---|---|---|---|
| 1 | 23 | 66.8% | 118 | Lowest-performing cluster, high stop count |
| 2 | 9 | 74.0% | 114 | Best-performing cluster |
| 3 | 27 | 71.8% | 105 | Largest cluster, above-average performance |
| 4 | 11 | 69.4% | 106 | Mid-performing |
| 5 | 13 | 67.5% | 108 | Below-average |
| 6 | 10 | 68.9% | 146 | Highest stop count |
Of 92 routes, 43 improved and 49 declined vs pre-COVID baseline (2019-01 to 2020-02 vs 2024-12 to 2025-11). However, a significant regression-to-the-mean effect (r = -0.25, p = 0.02) means much of the divergence is statistical rather than operational. The Kruskal-Wallis test across subtypes is not significant (p = 0.24), meaning there is no defensible evidence that premium routes recovered better as a group.
The most-improved routes (P7 +17 pp, G2 +13 pp) tend to be premium types, while the most-declined (71B -21 pp, 58 -21 pp, 65 -19 pp) are eastern-neighborhood local bus routes. But the extreme cases are partially explained by regression to the mean. The policy-relevant finding is narrower: specific local bus routes in the eastern corridor have deteriorated badly beyond what RTM alone predicts.
The system-wide OTP decline since COVID is unevenly distributed. Of 92 routes with data in both periods, 43 improved and 49 declined, with a median delta of -0.9 pp and a mean delta of -2.1 pp. However, a significant regression-to-the-mean effect (r = -0.25, p = 0.02) means that much of the apparent divergence between "improved" and "declined" routes is a statistical artifact: routes with extreme baselines naturally regress toward the mean.
Most improved:
| Route | Baseline | Current | Delta |
|---|---|---|---|
| P7 - McKeesport Flyer | 58.7% | 75.8% | +17.1 pp |
| G2 - West Busway | 75.4% | 88.4% | +13.0 pp |
| 21 - Coraopolis | 67.8% | 80.2% | +12.4 pp |
Most declined:
| Route | Baseline | Current | Delta |
|---|---|---|---|
| 71B - Highland Park | 63.0% | 41.9% | -21.1 pp |
| 58 - Greenfield | 70.4% | 49.8% | -20.6 pp |
| 65 - Squirrel Hill | 65.5% | 46.5% | -19.0 pp |
The recovery picture is more nuanced than "premium routes improved, local routes declined." RTM explains a substantial fraction of the divergence. The policy-relevant finding is narrower: specific local bus routes in the eastern corridor have deteriorated badly (15-21 pp below pre-COVID levels), and this decline exceeds what RTM alone would predict.
81 municipalities analyzed (better coverage than the 89 neighborhoods in Analysis 04). The spread is 24.9 pp: Castle Shannon borough (84.0%, on T line) to Plum borough (59.1%, long local bus). Suburban median OTP (68.1%) is near the system average – no systematic suburban disadvantage. Cross-jurisdictional routes perform identically to single-municipality routes (Welch's t-test p = 0.86), confirming that mode and stop count matter more than geography.
81 municipalities had enough stops (10+) to analyze. There is a 25 pp spread between the best and worst municipalities, similar to the neighborhood-level equity gap. Cross-jurisdictional routes (serving 2+ municipalities) perform no differently from single-municipality routes.
hood data.The equity gap is driven by mode and route structure, not by geography per se. Municipalities on rail or busway corridors get 80%+ OTP; those served only by long local bus routes get 60%. Municipal boundaries and suburban/urban distinctions are not meaningful predictors.
trips_7d) are a static snapshot applied across the full study period. Service levels changed over time, especially during COVID.Stop-level data suggests hubs have modestly worse OTP (simple 69.5% vs hub 66.4%), but the stop-level correlation (r = -0.17) uses non-independent observations (n=6,209 stops sharing ~90 underlying route OTP values). At the route level (independent, n=93), the correlation is not significant (r = -0.15, p = 0.16). Bus-only: r = -0.09, p = 0.39. The apparent "hub penalty" is a composition effect: hubs are served by many routes including poor performers, not because hub locations cause worse OTP. The busiest hub (East Busway Penn Station, 27 routes) outperforms the system average (72.1%).
Higher-connectivity stops appear to have modestly worse OTP in stop-level data, but this finding does not survive correction for non-independence. At the route level (independent observations), the correlation between stop connectivity and OTP is not significant (r = -0.15, p = 0.16). The apparent "hub penalty" is a composition effect driven by inflated sample size at the stop level.
| Tier | Stops | Mean OTP | Median OTP |
|---|---|---|---|
| Simple (1 route) | 3,875 | 69.5% | 69.2% |
| Medium (2-4 routes) | 2,138 | 66.0% | 65.0% |
| Hub (5+ routes) | 196 | 66.4% | 65.2% |
Stop-level (n=6,209 – non-independent, inflated power):
Route-level (n=93 – independent observations):
Route-level, bus only (n=90):
Being a transfer hub does not independently predict worse OTP. The apparent hub penalty is driven by which routes converge there. Policy should focus on improving the poorly-performing routes themselves, not on the hub locations.
There is no correlation between weekend-to-weekday service ratio and OTP (r = -0.03, p = 0.79). Weekday-heavy routes (69.8%), balanced routes (68.8%), and weekend-heavy routes (70.3%) perform virtually identically. Service profile is not a useful predictor of reliability.
There is no meaningful correlation between a route's weekend-to-weekday service ratio and its OTP. Routes that run heavy weekend service perform identically to commuter-oriented weekday-heavy routes.
| Service Tier | Routes | Mean OTP |
|---|---|---|
| Weekday-heavy (<0.3) | 27 | 69.8% |
| Balanced (0.3-0.7) | 45 | 68.8% |
| Weekend-heavy (>0.7) | 21 | 70.3% |
Weekend vs weekday service intensity is not a useful predictor of OTP. The structural factors identified in other analyses (stop count, mode, route length) dominate.
A six-feature OLS model explains 47.2% of OTP variance (adj R² = 0.435, n = 92). Three features are significant:
| Feature | Beta Weight | p-value |
|---|---|---|
| Stop count | -0.49 | <0.001 |
| Geographic span (km) | -0.47 | <0.001 |
| Rail mode | +0.34 | <0.001 |
| N municipalities (suppressor) | +0.41 | 0.001 |
| Premium bus subtype | +0.05 | 0.70 |
| Weekend ratio | -0.03 | 0.79 |
VIF values for all predictors are below 3, indicating moderate but manageable multicollinearity. The n_munis variable acts as a suppressor – its positive coefficient does not mean crossing more jurisdictions helps OTP, but rather that it partials out shared variance with stop count and span. A reduced model without n_munis yields R² = 0.40; a bus-only model (no rail dummy needed) yields R² = 0.38, confirming the findings generalize within the dominant mode.
Premium bus advantage disappears after controlling for stop count and span – those routes simply have fewer stops. The unexplained 53% likely reflects traffic, schedule design, staffing, and weather.
A six-feature OLS model explains 47.2% of OTP variance (adjusted R² = 0.435) across 92 routes. Three features are significant: stop count, geographic span, and rail mode. The model confirms that structural route characteristics explain nearly half of all performance variation, with the remaining 53% attributable to unmeasured factors (traffic, staffing, weather, schedule design).
| Feature | Coefficient | p-value | Beta Weight | Significant? |
|---|---|---|---|---|
| stop_count | -0.0006 | <0.001 | -0.49 | *** |
| span_km | -0.0049 | <0.001 | -0.47 | *** |
| is_rail | +0.133 | <0.001 | +0.34 | *** |
| n_munis | +0.009 | 0.001 | +0.41 | ** |
| is_premium_bus | +0.007 | 0.70 | +0.05 | |
| weekend_ratio | -0.006 | 0.79 | -0.03 |
The 47% R² means that knowing just a route's stop count, length, and mode gets you almost halfway to predicting its OTP. The unexplained 53% likely reflects:
These factors would require operational data not present in this dataset.
Ridership-weighted system OTP (69.4%) runs +1.6 percentage points higher than trip-weighted OTP (67.8%), and the difference is highly significant (paired t = -18.1, p < 0.001, n = 70 months). The average PRT rider experiences slightly better on-time performance than the trip-weighted system average suggests.
| Weighting Scheme | Mean OTP | Median OTP |
|---|---|---|
| Unweighted (all routes equal) | 69.9% | 70.3% |
| Trip-weighted (scheduled frequency) | 67.8% | 67.8% |
| Ridership-weighted (avg daily riders) | 69.4% | 69.2% |
Both weighted series fall below the unweighted average, meaning both scheduled trips and actual riders concentrate somewhat on worse-performing routes. However, trip frequency overstates how much ridership is concentrated on the worst routes – high-frequency routes tend to have many stops and poor OTP (Analysis 07), but riders don't fill those trips proportionally. This does not mean high-ridership routes have better OTP; it means ridership is distributed more evenly across the OTP spectrum than trip frequency is. The gap between trip-weighted and ridership-weighted was near zero during COVID (2020), widened to ~3 pp in late 2022, and has stabilized around 1–2 pp since 2023, likely reflecting post-COVID ridership redistribution. Analysis uses 93 routes with 12+ months of paired data over the Jan 2019 – Oct 2024 overlap period.
Ridership-weighted system OTP (69.4%) runs 1.6 percentage points higher than trip-weighted OTP (67.8%), and the difference is statistically significant (paired t = -18.1, p < 0.001; Wilcoxon W = 1, p < 0.001). This means the average PRT rider experiences slightly better on-time performance than the trip-weighted system average suggests.
Both weighted series fall below the unweighted average, meaning both scheduled trips and actual riders concentrate somewhat on worse-performing routes. However, trip frequency overstates how much ridership is concentrated on the worst routes. High-frequency routes tend to have many stops and poor OTP (Analysis 07), but riders don't fill those trips proportionally – some high-frequency routes carry fewer riders per trip than expected. The result is that the average rider's experience is worse than the average route's OTP, but not as bad as the trip-weighted number implies.
This does not mean high-ridership routes have better OTP. It means ridership is distributed more evenly across the OTP spectrum than trip frequency is.
route_stops.trips_7d is a current snapshot, not a monthly time series – trip-weighted OTP uses the same weights for all months.There is no evidence that OTP declines predict subsequent ridership losses. After detrending (subtracting system monthly mean) and Bonferroni correction, 0 of 93 routes show statistically significant Granger causality from OTP to ridership (8/93 at uncorrected p < 0.05, consistent with chance). The lagged cross-correlations are weakly negative at all lags (median r = -0.18 at lag 0, flat through lag 6), suggesting reverse causality: months with lower ridership tend to have better OTP (less crowding, shorter dwell times), not that good OTP attracts riders. The null result may reflect monthly data being too coarse, riders having no alternative transit options, or confounders (employment, gas prices, COVID) dominating the signal. Analysis uses 93 routes with 36–70 months of paired data, detrended before testing.
There is no evidence that OTP declines predict subsequent ridership losses. After detrending and Bonferroni correction, zero of 93 routes show statistically significant Granger causality from OTP to ridership. The raw cross-correlations are weakly negative, suggesting the opposite direction: months with lower ridership tend to have better OTP.
The hypothesis that poor OTP drives riders away is intuitive, but this data cannot confirm it. Several factors may explain the null result:
Zero of 93 routes have recovered to pre-COVID weekday ridership (median -43%). Routes that lost more ridership tended to see better OTP recovery (Pearson r = -0.21, p = 0.047; Spearman r = -0.29, p = 0.005), weakly supporting a crowding mechanism: fewer riders means shorter dwell times and better schedule adherence. However, the system is running far fewer riders and OTP has still declined for 58/93 routes, indicating the OTP decline is primarily driven by operational factors (staffing, traffic) rather than demand-side crowding. No subtype (local, flyer, busway, rail) recovered OTP significantly better than others (Kruskal-Wallis p = 0.58). Flyer routes lost the most ridership (median -68%) due to commute-demand collapse.
Zero of 93 routes have recovered to pre-COVID ridership levels (median -43%, all negative). Routes that lost more ridership tended to see better OTP recovery (r = -0.21, p = 0.047), weakly supporting the hypothesis that ridership recovery degrades OTP through crowding and longer dwell times.
The weak negative correlation between ridership recovery and OTP recovery is consistent with a crowding mechanism: routes that regained more riders saw their OTP degrade (or fail to improve), while routes that stayed emptier ran closer to schedule. However, the effect is weak (r = -0.21) and the correlation is borderline significant (p = 0.047), so it should be interpreted cautiously.
The most policy-relevant finding is the universal ridership collapse: every single route is still below pre-COVID levels, with a median loss of 43%. This dwarfs any OTP effects. The system is running fewer riders on roughly the same infrastructure, and OTP has still declined for most routes – suggesting that the OTP decline is driven by operational factors (staffing, vehicle maintenance, traffic congestion) rather than demand-side crowding alone.
The absence of subtype differences (Kruskal-Wallis p = 0.58) confirms Analysis 14's finding: no route type has recovered OTP systematically better or worse than others.
Over Jan 2019 – Oct 2024, PRT accumulated 55.5 million late weekday rider-trips (31% late rate). The top 10 routes account for 26.6% of all late rider-trips. Ridership weighting substantially reshuffles route priorities: Route 51 (Carrick) ranks only 55th by OTP (68.6%) but 2nd by delay burden due to massive ridership, while Route 77 (worst OTP at 54.9%) ranks only 18th by burden. The Spearman rank correlation between OTP rank and burden rank is only 0.40 – OTP rank alone is a poor proxy for human impact. The biggest upward shifts are high-ridership rail/busway routes (P1 +77 ranks, RED +72); the biggest downward shifts are low-ridership flyers (65 -70, P69 -66). The system's total delay burden has paradoxically decreased post-COVID – not because OTP improved, but because ridership collapsed.
Over the Jan 2019 – Oct 2024 overlap period, PRT accumulated 55.5 million late weekday rider-trips out of 179.2 million total (31% late rate). The top 10 routes by delay burden account for 26.6% of all late rider-trips, and ridership weighting substantially reshuffles which routes appear most problematic compared to a pure OTP ranking.
| Burden Rank | Route | OTP Rank | Avg OTP | Cumulative Late Rider-Trips |
|---|---|---|---|---|
| 1 | 61C - McKeesport-Homestead | 3 | 59.0% | 2,765,662 |
| 2 | 51 - Carrick | 55 | 68.6% | 2,360,226 |
| 3 | 71C - Point Breeze | 8 | 60.9% | 2,241,803 |
| 4 | 61A - North Braddock | 7 | 60.6% | 2,135,034 |
| 5 | 71B - Highland Park | 10 | 61.9% | 2,086,371 |
Route 51 (Carrick) is the standout example: it ranks only 55th by OTP (68.6%, near the system average) but 2nd by delay burden because it carries massive ridership. Conversely, Route 77 (Penn Hills) has the worst OTP (54.9%) but ranks only 18th by burden because fewer people ride it.
This analysis reframes the OTP problem from "which routes are most unreliable" to "where does unreliability affect the most people." The two questions give different answers. A policy intervention on Route 51 (the #2 burden route) would affect more riders than fixing Route 77 (the #1 worst OTP route), even though 51's OTP is 14 pp better. Similarly, even small OTP improvements on high-ridership rail/busway routes would reduce more late rider-trips than large OTP improvements on low-ridership flyers.
The system's total delay burden has paradoxically decreased post-COVID – not because service improved, but because fewer people are riding. If ridership recovers without OTP improvements, the burden will return to or exceed pre-COVID levels.
avg_riders day_count (1 - OTP). It does not measure actual delay duration – a trip that is 1 minute late counts the same as one that is 30 minutes late.PRT garages differ significantly in route-level OTP, and the difference survives controlling for route structure (stop count + span). A bus-only OLS model shows garage dummies add significant explanatory power beyond structural controls (F = 4.55, p = 0.005, R² increase from 0.31 to 0.41). Collier routes run +5.4 pp above East Liberty after controls (p < 0.001); Ross runs +2.9 pp (p = 0.04). West Mifflin's poor raw performance is largely explained by route structure (+1.4 pp, p = 0.36 after controls). Operational feedback indicates the Collier advantage is primarily a corridor-level congestion proxy: Collier serves less congested western suburbs, has routes with shorter downtown segments, and has a more favorable route portfolio – rather than reflecting garage-specific operational practices. The 10% R² increase from garage dummies likely captures traffic environment variance not measurable with available AADT data. All garages move together on system-wide trends; relative ordering is stable over time.
PRT garages differ significantly in route-level OTP, and the difference survives controlling for route structure. An OLS model with stop count and geographic span as controls shows that garage dummies add significant explanatory power (F = 4.55, p = 0.005). Collier garage routes run +5.4 pp above East Liberty routes after controlling for stop count and span (p < 0.001).
| Garage | Routes | Mean OTP | Ridership-Wtd OTP | Avg Daily Riders |
|---|---|---|---|---|
| South Hills Village | 3 | 85.4% | 85.3% | 11,588 |
| Collier | 18 | 73.6% | 73.9% | 14,226 |
| Ross | 22 | 70.7% | 69.5% | 20,141 |
| West Mifflin | 19 | 67.9% | 65.8% | 32,388 |
| East Liberty | 31 | 67.1% | 67.5% | 42,259 |
| Model | R² | Adj R² |
|---|---|---|
| Base (stop_count + span) | 0.313 | 0.297 |
| Full (+ garage dummies) | 0.410 | 0.374 |
F-test for garage dummies: F = 4.55, p = 0.005 – garages are significant after controls.
| Feature | Coefficient | p-value |
|---|---|---|
| stop_count | -0.00039 | 0.001 |
| span_km | -0.0022 | 0.014 |
| garage_Collier | +0.054 | <0.001 |
| garage_Ross | +0.029 | 0.040 |
| garage_West_Mifflin | +0.014 | 0.358 |
The controlled analysis overturns the initial interpretation that garage differences were purely a composition effect. Collier's advantage is real and operationally meaningful: after accounting for the fact that it operates shorter routes with fewer stops, Collier routes still outperform East Liberty routes by 5.4 pp.
Operational feedback from PRT-experienced observers identifies several likely explanations for the Collier advantage:
These factors suggest the garage effect is primarily a corridor-level congestion proxy rather than evidence of operational differences in garage management. The controlled model accounts for route length and stop count but not for the traffic environment each route operates in – and the available traffic data (AADT) is too coarse to fill this gap.
West Mifflin's poor raw performance, by contrast, is largely explained by route structure: it operates the long eastern-corridor routes, and after controlling for that, it is statistically indistinguishable from East Liberty.
The R² increase from 0.31 to 0.41 suggests that garage assignment captures roughly 10% of OTP variance beyond what stop count and span explain. Given the corridor-congestion explanation, this 10% likely represents traffic environment variance rather than garage-specific operational practices.
current_garage field is a snapshot; historical garage assignments are not available. If routes were reassigned between garages, the analysis would not capture that (though the data shows no garage changes for any route).Weekend ridership has recovered far more strongly than weekday ridership since COVID. As of October 2024, Saturday service is at 90.7% of its January 2019 level and Sunday at 83.9%, while weekday service is at just 64.5% – a 26 pp gap. Weekend's share of total ridership rose from 13.6% pre-COVID to 17.8% post-2023 (+4.2 pp), a structural shift consistent with remote work reducing weekday commuting while discretionary weekend travel returns. The weekend-to-weekday ridership ratio does not significantly correlate with route-level OTP (Pearson r = -0.20, p = 0.097, n = 67 routes), meaning the weekday ridership collapse is driven by exogenous demand factors, not service quality differences. Both Saturday and Sunday series show stronger seasonal swings (summer peaks, winter troughs) than weekday, consistent with weather-sensitive discretionary travel.
Weekend ridership has recovered far more strongly than weekday ridership since COVID. As of October 2024, Saturday service is at 90.7% of its January 2019 level while weekday service is at just 64.5%. Weekend's share of total ridership rose from 13.6% pre-COVID to 17.8% post-2023, a +4.2 pp structural shift. The weekend-to-weekday ridership ratio does not significantly correlate with route-level OTP (Pearson r = -0.20, p = 0.097).
The 26-percentage-point gap in recovery between weekday (64.5%) and Saturday (90.7%) service is the headline finding. This is consistent with national trends: remote and hybrid work has permanently reduced weekday commuting, while discretionary weekend travel has largely returned. For PRT, this means:
avg_riders field is an average daily ridership for each month, not a total. Multiplying by day_count gives an estimate of total monthly riders, but this assumes uniform ridership across all days of a given type within a month.otp_monthly table contains a single OTP value per route per month, so we cannot directly compare weekday vs weekend OTP.Ridership is moderately concentrated on low-OTP routes. The bottom quintile by OTP (Q1, avg 61.2%) carries 29.6% of all ridership (32.7% bus-only), far more than its 20% "fair share." Half of all bus ridership is on just 33/89 routes with OTP below 66.8%. The Gini concentration index is 0.068 (all routes) and 0.145 (bus-only) – rail in Q5 masks a more pronounced bus equity problem. The quintile distribution is U-shaped: both Q1 (worst OTP, high-ridership local bus) and Q5 (best OTP, rail/busway) carry disproportionate ridership, while mid-performing routes carry the least. Targeting Q1 bus routes (18 routes, 32.7% of bus ridership, avg OTP 61.2%) offers the highest human impact per intervention.
Ridership is moderately concentrated on low-OTP routes. The bottom quintile of routes by OTP (Q1, avg 61.2%) carries 29.6% of all ridership (32.7% bus-only), far more than its 20% "fair share." Half of all bus ridership is carried by just 33 of 89 routes, all with OTP below 66.8%. The Gini concentration index is modest (0.068 all routes, 0.145 bus-only), indicating the inequity is real but not extreme.
The equity picture is mixed. On one hand, the worst-performing routes carry a disproportionate share of riders – nearly 30% of ridership on the bottom 20% of routes. On the other hand, the best routes (Q5) also carry substantial ridership, so it is not the case that reliable service is reserved for lightly-used routes. The U-shape reflects PRT's system structure: high-ridership corridors tend to be either long, many-stop local bus routes (which have poor OTP due to route complexity, per Analysis 07) or dedicated right-of-way routes (rail/busway, which have good OTP). Middle-performing routes tend to be lower-ridership suburban and express services.
The bus-only Gini (0.145) is more than double the all-mode Gini (0.068), confirming that rail's presence in Q5 masks a more pronounced equity problem within bus service. If PRT seeks to improve the rider-weighted experience, targeting the Q1 bus routes (avg OTP 61.2%, 32.7% of bus ridership) offers the highest human impact per intervention.
Adding log-transformed average weekday ridership to the Analysis 18 six-feature OLS model does not significantly improve explanatory power (F = 2.53, p = 0.116). R² increases by only 1.5 pp (0.499 to 0.514). Ridership is not collinear with stop count or span (VIF = 1.73), but is redundant with existing structural predictors. A ridership-only model (log_riders + is_rail) explains just 23.2% of variance versus 49.9% for the structural model. High ridership does not independently degrade OTP – poor-performing routes happen to have high ridership because they are long, many-stop corridors, not because passenger volumes cause delays. This reinforces Analysis 10 (trip frequency null) and Analysis 19 (ridership-weighted OTP slightly higher than trip-weighted).
Adding log-transformed average weekday ridership to the Analysis 18 multivariate model does not significantly improve explanatory power. The F-test for the ridership term is not significant (F = 2.53, p = 0.116), and R² increases by only 1.5 pp (from 0.499 to 0.514). Ridership is not collinear with stop count or span (VIF = 1.73), but it is largely redundant with the existing predictors – once route structure is controlled for, knowing how many people ride a route tells you almost nothing additional about its OTP.
| Model | R² | Adj R² | n |
|---|---|---|---|
| Base (6 features, Analysis 18 replication) | 0.499 | 0.464 | 92 |
| Expanded (+ log_riders) | 0.514 | 0.473 | 92 |
| Bus-only base (5 features) | 0.392 | 0.355 | 89 |
| Bus-only expanded (+ log_riders) | 0.410 | 0.367 | 89 |
| Ridership-only (log_riders + is_rail) | 0.232 | 0.215 | 92 |
| Feature | Beta Weight | p-value |
|---|---|---|
| stop_count | -0.43 | <0.001 |
| span_km | -0.47 | <0.001 |
| is_rail | +0.43 | <0.001 |
| n_munis | +0.35 | 0.005 |
| log_riders | -0.16 | 0.116 |
| is_premium_bus | +0.08 | 0.511 |
| weekend_ratio | +0.06 | 0.605 |
This is a clean null result. Ridership does not add meaningful information to the OTP model once route structure is accounted for. The practical implication is that PRT does not need to worry that high ridership per se degrades OTP – the routes with poor OTP happen to have high ridership because they are long, many-stop local bus corridors, not because passenger volumes cause delays. This is consistent with Analysis 10's finding that trip frequency does not predict OTP.
The weak negative direction of the ridership coefficient (-0.16 beta) is suggestive but not significant, and it could reflect residual confounding (high-ridership routes serve congested urban corridors) rather than a causal ridership-to-delay mechanism.
Total traffic volume (AADT) does not explain OTP variance after controlling for structural features (F=0.011, p=0.92, R2 change +0.0001). Routes on high-traffic roads perform no differently than those on quieter ones. However, truck percentage is a significant predictor (p=0.006, beta=+0.26), jointly boosting R2 from 0.40 to 0.45 when added alongside AADT (joint F=3.97, p=0.023). The positive truck coefficient likely proxies for road classification – truck-heavy corridors are wider arterials with longer signal phases and more predictable flow, not a direct truck-bus interaction. VIF for log_aadt is just 1.17 – traffic volume is orthogonal to the structural features already in the model, it simply has no effect. 89 routes were matched to 2,923 PennDOT road segments via KDTree spatial join (median match rate 80%); 3 rail routes excluded for low match rate (<30%).
The null AADT result most likely reflects a measurement mismatch: AADT is a 24-hour annual average that smooths over peak-hour congestion, which is when buses operate most and are most affected. Peak-hour or speed/travel-time data would be a stronger test. The cumulative model-building picture across Analyses 18, 26, and 27 is that roughly half of OTP variance is explained by route geometry and road type (stop count, span, mode, truck share), and the other half likely requires operational data (schedule padding, driver availability, real-time traffic) not available in this dataset. For policy, the null result suggests rerouting buses to lower-traffic roads would not improve OTP; the truck_pct finding reinforces that arterial alignment (fewer stops per mile, better infrastructure) is the structural advantage.
Total traffic volume (AADT) does not explain OTP variance after controlling for structural features (F=0.011, p=0.92). However, truck percentage is a significant predictor (p=0.006), jointly boosting R2 from 0.40 to 0.45. Routes with higher truck traffic perform better on-time, likely because truck-heavy corridors tend to be wider arterials with fewer stops and more predictable traffic flow.
The headline result is a null: traffic volume, the leading candidate for explaining the remaining 50% of OTP variance after structural features, contributes essentially nothing (R2 change of 0.01%). This is not a measurement failure – the VIF of 1.17 confirms that AADT is nearly orthogonal to stop count and span, so it had every opportunity to capture independent variance. It simply doesn't.
Why not? The most likely explanation is that AADT measures the wrong thing. Annual average daily traffic smooths over the peak-hour congestion that actually delays buses. A road carrying 15,000 vehicles/day spread evenly across 24 hours is very different from one carrying the same total with 40% concentrated in two rush-hour peaks. PRT buses operate disproportionately during those peaks, so the congestion they experience is poorly proxied by a 24-hour average. Directional, time-of-day traffic counts – or better yet, speed/travel-time data from probe vehicles – would be a more direct test.
The truck percentage finding is the genuine contribution of this analysis. At +0.26 beta weight (third-strongest after stop count and span), truck share adds 5 percentage points of explained variance. But this almost certainly proxies for road classification rather than a direct truck-bus interaction. Roads with high truck percentages tend to be state highways and major arterials – wider, with longer signal cycles, fewer pedestrian crossings, and more predictable traffic flow. The truck_pct variable is effectively encoding "this route runs on a highway" in a way that is_premium_bus failed to capture (since many non-premium routes also use arterial segments for part of their alignment).
This connects to the broader model-building narrative across Analyses 18, 26, and 27. The base model (stop count + span + mode) explains ~40% of variance. Adding n_munis as a suppressor pushes it to ~47%. Adding truck_pct pushes it to ~45% on the traffic-matched subsample. Ridership (Analysis 26) added nothing. The cumulative picture is that roughly half of OTP variance is explained by route geometry and road type, and the other half likely requires operational data (schedule padding, driver availability, vehicle condition, real-time traffic conditions) that is not in this dataset.
For policy, the null AADT result is actually useful: it suggests that rerouting buses to lower-traffic roads would not improve OTP, since traffic volume per se is not the problem. The truck_pct finding, if it indeed proxies for road type, suggests that routes spending more of their alignment on arterials (vs. neighborhood streets) perform better – consistent with the stop count finding, since arterial segments typically have fewer stops per mile.
Weather variables show moderate raw correlations with system OTP (freeze_days r=+0.44, mean_tmin r=-0.40) that strengthen after detrending (freeze_days r=+0.57, mean_tmin r=-0.57), but the direction is counterintuitive – colder, snowier months have better OTP. Weather jointly adds 15pp of R2 beyond a linear trend (F=3.44, p=0.008) at the system level, but does not significantly improve on month-of-year dummies (F=0.92, p=0.48). Conversely, month dummies do not significantly improve on weather variables either (F=1.09, p=0.39). Weather and seasonality are statistically interchangeable – both capture the same seasonal signal through different variables, and neither adds beyond the other.
Weather adjustment partially flattens the seasonal profile from Analysis 06: January's peak drops from 70.8% to 68.4% (-2.4pp) and September's trough rises from 64.0% to 65.3% (+1.3pp), narrowing the best-to-worst spread from 6.8pp to 3.8pp. Only September retains a significant month dummy (p=0.039) in the combined model.
At the route-month level (n=6,672, 72 monthly clusters), weather explains just 4.5% of within-route OTP variation. With cluster-robust standard errors (acknowledging weather is constant across routes within a month), no weather variable is significant (all p>0.12). Weather is a system-level seasonal modulator, not a route-level discriminator – all routes respond similarly to weather, providing no discriminating power for individual route performance. The counterintuitive cold=better direction suggests the mechanism is seasonal demand patterns (lower winter ridership and congestion) rather than weather as an impediment.
Weather variables show moderate raw correlations with system OTP (freeze_days r=+0.44, mean_tmin r=-0.40, snow_days r=+0.40) that strengthen after detrending (freeze_days r=+0.57, mean_tmin r=-0.57), but these correlations are counterintuitive – colder, snowier months have better OTP. Weather jointly adds 15pp of R2 beyond a linear trend (F=3.44, p=0.008) but does not significantly improve on month dummies (F=0.92, p=0.48). The seasonal pattern from Analysis 06 is partially explained by weather – weather adjustment flattens the winter peak by ~2.4pp and lifts the September trough by ~1.3pp – but month dummies add no significant additional explanatory power beyond weather either (F=1.09, p=0.39). At the route-month level with cluster-robust standard errors, no weather variable is significant (all p>0.12), indicating weather effects are too small relative to route-level noise to detect in the panel.
The key finding is that weather and seasonality are statistically interchangeable at the system level – they capture overlapping variance, and neither adds significantly beyond the other. This means the Analysis 06 seasonal pattern can be described as a weather pattern (cold months = better OTP) but we cannot determine whether weather causes the pattern or merely co-occurs with other seasonal factors (school schedules, construction seasons, ridership patterns).
The counterintuitive direction (cold = better OTP) suggests the mechanism is not weather-as-impediment but rather seasonal demand and operational patterns: winter reduces ridership and road congestion, improving schedule adherence despite worse driving conditions. Snow and cold are proxies for lower demand, not direct causes of better performance.
The panel regression null result is important: even though system-level correlations are strong (r>0.5), weather variation explains only 4.5% of route-month OTP variation, and this disappears with proper clustering. This indicates weather is a system-level seasonal modulator rather than a route-level predictor – all routes respond similarly to weather, so it provides no discriminating power for individual route performance.
Schedule changes (pick period transitions) are associated with a small but statistically significant positive OTP shift (+0.6 pp mean, t=2.95, p=0.003), though the effect is weak and does not differ significantly by event type. Of 738 events across 101 routes, service increases (+118 trips/day) yield +1.3 pp OTP improvement, service cuts (-64 trips/day) yield +0.1 pp, and neutral restructurings yield +0.8 pp – but the Kruskal-Wallis test finds no significant difference between types (H=4.03, p=0.13). The correlation between trip count change and OTP change is marginally significant (Spearman rho=0.074, p=0.045) but explains less than 1% of variance. COVID-period events (n=184) show a smaller effect (+0.2 pp) than non-COVID events (+0.8 pp). The positive mean delta may reflect PRT timing changes to coincide with operational improvements or seasonal gains rather than a causal effect of the schedule change itself.
Schedule changes (pick period transitions) are associated with a small but statistically significant positive OTP shift on average, though the effect is weak and does not differ significantly by event type (increase, cut, or neutral).
- Service increases (+118 trips/day avg): +1.3 pp OTP delta (n=110) - Service cuts (-64 trips/day avg): +0.1 pp OTP delta (n=215) - Neutral (same trips, new schedule): +0.8 pp OTP delta (n=413)
The statistically significant but tiny positive mean delta (+0.6 pp) is best interpreted as evidence that schedule changes are not harmful to OTP, rather than evidence that they improve it. The effect size is operationally negligible – less than 1 percentage point – and the lack of differentiation across event types (Kruskal-Wallis p=0.13) means we cannot conclude that service increases help or that service cuts hurt.
The most striking finding is the dominance of "neutral" events (413 of 738). Most pick period transitions leave trip counts unchanged, meaning PRT's schedule restructurings are primarily about rearranging timing, not adding or removing service. These neutral events still show a +0.8 pp OTP delta, which is consistent with the hypothesis that PRT uses schedule changes as opportunities to adjust running times or pad recovery time – operational improvements that would improve OTP without changing trip frequency.
The marginal Spearman correlation (rho=0.074, p=0.045) aligns with the direction suggested by Analysis 30's pre-COVID subperiod (adding trips slightly degrades OTP), but in the opposite direction here – adding trips is associated with better OTP. This apparent contradiction dissolves when considering that Analysis 29 measures 3-month average shifts around discrete events, while Analysis 30 measures month-over-month continuous variation. The schedule change event likely captures a package of operational adjustments (new running times, rerouted deadheads, adjusted layover) that happen to coincide with trip count changes, not a pure frequency effect.
For policy, the null Kruskal-Wallis result is the most actionable finding: it suggests PRT can adjust service levels (up or down) without expecting systematic OTP consequences. OTP is determined by factors other than how many trips are scheduled.
Within-route month-over-month changes in scheduled trip frequency have no significant relationship with detrended OTP changes. Across 2,374 delta observations from 93 routes over 27 months (Jan 2019 – Mar 2021), the overall effect is essentially zero (Pearson r=0.018, p=0.39; Spearman rho=-0.030, p=0.15). Bus-only results are similar (r=0.023, p=0.26). The pre-COVID subperiod shows a marginally negative slope (r=-0.052, p=0.07), suggesting adding trips slightly degraded OTP when the system was near capacity, but this does not survive multiple-comparison correction. The post-COVID subperiod is null (r=0.030, p=0.31). This confirms Analysis 10's cross-sectional null finding with a stronger longitudinal within-route design that controls for all time-invariant route characteristics, reinforcing the conclusion that trip frequency is not a lever for OTP improvement.
Within-route month-over-month changes in scheduled trip frequency have no significant relationship with OTP changes after detrending. This null result holds across all routes, bus-only, and in both pre- and post-COVID subperiods.
This null result is the most methodologically rigorous frequency-OTP test in the project. Analysis 10 was cross-sectional (comparing different routes at one point in time) and confounded by route characteristics – long routes have both more trips and worse OTP for structural reasons. This analysis controls for all time-invariant route features by using within-route changes over time, and detrends to remove system-wide shocks. The result is unambiguous: trip frequency changes do not predict OTP changes within routes.
The marginally negative pre-COVID slope (r=-0.052, p=0.07) is the one signal worth noting. Before COVID, the system was operating near capacity, and adding trips to an already-constrained route may have slightly degraded schedule adherence – each additional trip competes for the same road space, layover time, and driver availability. After COVID reduced demand, this constraint relaxed and the effect disappeared. This is consistent with a capacity-constrained model where frequency only matters at the margin when the system is near saturation, and is irrelevant otherwise.
The policy implication reinforces what emerged across Analyses 10, 26, and 29: scheduled service frequency is not a lever for OTP improvement. Routes don't get more on-time by running fewer trips, and they don't get less on-time by running more. The ~50% of OTP variance explained by the multivariate model (Analysis 18) comes from structural features (stop count, route length, mode), and the remaining ~50% likely reflects operational factors (schedule padding, driver availability, real-time traffic variability) that are orthogonal to how many trips are scheduled.
The 27-month window is a genuine limitation. A longer panel with more schedule variation – particularly one that captures the post-2021 period when PRT may have restructured service – could provide more statistical power. Extending the WPRDC data or obtaining historical GTFS archives would strengthen this null finding or reveal effects that 27 months cannot detect.
43% of stop-route combinations see fewer than 5 daily boardings+alightings, and 99.4% of those have a same-route neighbor within 400 m. Using the stop-count/OTP regression slope (-0.059 pp per stop removed), removing these low-usage candidates yields a naive estimated average OTP gain of +3.2 pp per route, with Route 59 (Mon Valley) seeing the maximum at +10.2 pp from consolidating 174 of its 334 stops. Flyer routes (P10, P16, O5) have the most candidates (148-167 each), consistent with their long suburban corridors. 87 of 90 OTP-matched routes have at least one candidate.
However, the OTP gain estimate is likely overstated. PRT bus drivers already skip stops where no one is waiting and no one has signaled to alight. A low-usage stop (<5 daily boardings) is empty on the vast majority of individual bus trips, so the bus already passes it without stopping most of the time – removing the sign changes little operationally. The cross-sectional regression slope reflects that high-stop-count routes are structurally different (longer, more urban, more signals), not that each individual stop adds a fixed marginal delay. Analysis 34 reinforces this: per-stop ridership concentration has no correlation with OTP (r = -0.016), suggesting dwell time from passenger volumes is not the dominant mechanism. Additionally, stop removal raises accessibility concerns for riders with disabilities (400 m on hilly terrain may be prohibitive) and affects short-trip riders who depend on incremental stop spacing. The finding is better read as evidence that route design with fewer, better-spaced stops (limited-stop or express overlays) outperforms local-stop design, rather than as a case for piecemeal stop removal.
43% of all stop-route combinations in the PRT system see fewer than 5 daily boardings+alightings on weekdays, and nearly all of these have a same-route neighbor within 400 m walking distance. Removing these low-usage stops could yield an average OTP improvement of +3.2 percentage points per route, with the highest-impact routes gaining up to +10 pp. The top candidates are long suburban/flyer routes with many lightly used stops along corridors.
Analysis 07 established that stop count is the strongest single predictor of poor OTP (r = -0.53), and this analysis shows that nearly half the system's stop-route pairs see trivially low usage. The correlation between stop count and OTP is real and robust across multiple specifications.
The concentration of candidates on flyer routes (P10, P16, O5) is intuitive: these routes traverse long suburban corridors where stops were placed at frequent intervals to maximize coverage, but actual demand clusters at a few park-and-ride or transfer locations.
The +3.2 pp average gain estimate assumes each stop removed saves equivalent time, but PRT bus drivers already skip stops where no one is waiting and no one has signaled to alight. A low-usage stop with <5 daily boardings is empty on the vast majority of individual bus trips, meaning the bus already passes it without stopping most of the time. Removing the sign does not change this operational reality.
The cross-sectional regression slope (-0.059 pp/stop) captures the fact that routes with many stops are structurally different – they are longer, serve denser urban corridors with more traffic signals, and have higher cumulative probability of someone being at the next stop. These are route design characteristics, not marginal effects of individual stops. The causal effect of removing a single low-usage stop is likely well below the regression estimate.
Analysis 34 (Ridership Concentration) reinforces this interpretation: per-stop ridership concentration has no correlation with OTP (r = -0.016, p = 0.88), suggesting dwell time from passenger volumes is not the dominant mechanism. The stop count/OTP relationship is better understood as a proxy for route design philosophy (local vs limited-stop vs express) rather than a per-stop causal lever.
The 400 m walk-distance filter assumes riders can walk to the next stop, but this may not hold for riders with disabilities, elderly riders, or those with mobility limitations – particularly given Pittsburgh's hilly terrain. ADA compliance is not just a legal requirement but a core service obligation. Any consolidation program would require stop-by-stop accessibility review. Some low-usage stops may also serve riders making short trips where incremental stop spacing is the primary value of the bus service.
The stop count/OTP relationship is best read as evidence that route design with fewer, better-spaced stops outperforms local-stop design – which is already reflected in the busway/express vs local gap (Analysis 02). The policy implication points more toward limited-stop or express overlays on high-ridership corridors than toward individual stop removal. Converting low-usage suburban segments to limited-stop service (as the flyer route candidates suggest) is more defensible than piecemeal stop removal, because it redesigns the service pattern rather than degrading existing local coverage.
Stop consolidation remains politically sensitive. Community opposition to stop removal often exceeds what ridership data would justify. A phased approach – starting with stops below 1 rider/day that have a neighbor within 200 m, with accessibility review – would minimize controversy while testing whether actual OTP gains materialize.
Only 7.3% of bus stops have shelters, yet those sheltered stops serve 31% of total ridership. Sheltered stops have 5x the median usage of unsheltered stops (34 vs 7 riders/day, Mann-Whitney p = 9.2e-84). The top 20 unsheltered stops (1,200-2,800 riders/day) are concentrated in downtown and Oakland. Shelter ownership reveals divergent placement strategies: PAAC and City of Pittsburgh target moderate-to-high usage stops (165-204/day avg), while Lamar advertising shelters average only 26/day – suggesting ad revenue rather than ridership drives their locations. Bus stops have just 7% shelter coverage versus 73% for busway and 100% for light rail.
Only 7.3% of PRT bus stops have shelters, yet those sheltered stops serve 31% of total system ridership. Sheltered stops have 5x the median daily usage of unsheltered stops (34 vs 7 riders/day). The most striking gap is among regular bus stops, where just 7% have shelters despite serving the vast majority of riders. Several of the system's busiest stops – including downtown intersections with 2,000+ daily boardings – lack any shelter.
The shelter coverage gap represents a tangible rider experience problem. The 20 busiest unsheltered stops collectively serve ~35,000 riders per day who wait without weather protection. Given Pittsburgh's climate (Analysis 28 showed snow days and freeze days significantly affect OTP), shelter absence at high-volume stops compounds the negative experience of unreliable service.
The divergence between shelter owners reveals different placement strategies. PAAC and City of Pittsburgh place shelters at moderately high-usage stops (165-204/day), following a ridership-informed approach. Lamar's advertising-driven placements (26/day average) prioritize visibility for ad revenue over rider need, and Heffner's placements (3/day) appear driven by factors entirely unrelated to ridership. This suggests the advertising-shelter model, while providing free infrastructure, does not align with transit equity goals.
The Pareto finding from Analysis 34 (2% of stops serve 50% of riders) frames the opportunity: sheltering just the top 150 unsheltered stops would reach a large share of unprotected riders. At typical shelter costs of $15-30K per installation, covering the top 20 unsheltered stops would cost $300-600K while protecting ~35,000 daily riders – a strong return on investment.
The downtown equity gap is particularly striking because these stops are the most visible face of the transit system. Visitors and new riders encountering a 2,800-rider/day stop with no shelter receive a signal about the system's investment priorities. Addressing the downtown/Oakland gaps would improve both rider experience and public perception.
System weekday ridership fell 63.1% between pre-pandemic and pandemic periods. The loss was remarkably uniform geographically: median stop-level change was -60% for downtown, -62% for the inner ring (2-8 km), and -59% for the outer ring (>8 km). The inner ring had the steepest aggregate loss (-65.7%), driven by Oakland/university-area stops that lost 70-87%. Outer suburbs retained ridership slightly better (-55.7% aggregate), consistent with more transit-dependent essential workers. Mode differences were minimal (bus -60%, busway -58%, light rail -56%). The geographic uniformity challenges the narrative that downtown transit was disproportionately affected – the pandemic's impact was driven by system-wide behavioral shifts rather than location-specific factors.
System-wide weekday ridership fell 63% between the pre-pandemic baseline (Sep 2019/Jan 2020) and the pandemic period (Sep 2020/Apr 2021). The loss was remarkably uniform geographically: the median stop lost ~60% regardless of whether it was in downtown, the inner ring, or the outer suburbs. The largest absolute losses were concentrated at high-volume downtown and university-area stops, while outer suburban stops showed slightly better retention in aggregate.
The geographic uniformity of ridership loss challenges the narrative that the pandemic disproportionately affected downtown transit. While downtown and Oakland stops did lose the most riders in absolute terms (because they started highest), the rate of loss was nearly identical everywhere. This suggests the pandemic's impact was driven more by system-wide behavioral shifts (remote work, fear of shared spaces) than by location-specific factors.
The slightly better retention in outer suburbs aligns with the "essential worker" hypothesis: riders who depend on transit for non-office jobs continued riding at higher rates. This has implications for service planning – if remote work persists, the ridership center of gravity may permanently shift outward, favoring suburban route investment.
The Oakland/university corridor stands out as a potential recovery target: these stops lost 70-87% of riders, largely due to remote instruction. As universities have returned to in-person operations, these stops may have recovered more than this pandemic-era snapshot shows.
PRT ridership is extremely concentrated: 2% of stops serve 50% of riders, and 14% serve 80%. The system-wide Gini coefficient is 0.824. Per-route Gini ranges from 0.34 to 0.89 (median 0.65), with flyer routes showing the highest concentration. However, route-level ridership concentration has no correlation with OTP (Pearson r = -0.016, p = 0.88; Spearman rho = 0.103, p = 0.34). This null result suggests that dwell time at individual stops (a function of passenger volume) is not a dominant factor in OTP – the time cost of stopping itself (deceleration, doors, acceleration) matters more than how many passengers board, reinforcing stop count as the key lever.
PRT ridership is extremely concentrated: just 2% of stops serve 50% of all weekday riders, and 14% of stops serve 80%. The system-wide Gini coefficient is 0.82, indicating very high inequality in stop-level usage. However, per-route ridership concentration (Gini) has essentially zero correlation with that route's OTP (r = -0.016, p = 0.88), meaning whether a route's riders are clustered at a few stops or spread evenly has no bearing on schedule reliability.
The extreme system-wide concentration (Gini = 0.82) reinforces the stop consolidation finding from Analysis 31: most stops contribute very little ridership, and removing the lowest-usage ones would affect few riders while potentially improving OTP by reducing stop count.
The null result for Gini vs OTP is notable. One might hypothesize that routes with concentrated ridership would have better OTP (less dwell time at most stops), but this doesn't hold. This suggests that dwell time at individual stops is not a dominant factor in OTP variance – the time cost of stopping (deceleration, door opening, acceleration) matters more than the time cost of boarding passengers. This aligns with the Analysis 07 finding that raw stop count, not passenger volume, drives OTP.
The 2/50 concentration ratio has resource allocation implications: if PRT focused infrastructure investment (shelters, real-time signs, ADA upgrades) on just 150 stops, it would reach half of all riders. The current shelter coverage of 7% (Analysis 32) suggests significant room to target the highest-impact locations.
System boardings (130,121/day) and alightings (129,684/day) are nearly balanced (ratio 1.003), but individual stops show strong directional asymmetry. Inbound stops net +22,385 boardings (ratio 1.36); outbound net -24,197 (ratio 0.73) – confirming PRT's classic radial commuter pattern. The top generators (Smithfield St, 5th Ave) are outbound departure points; the top attractors (Wood St, Liberty Ave/Gateway) are inbound arrival points. This street-level split reflects downtown's one-way grid routing. Busway stations show split behavior: Wilkinsburg Platform C is a generator (+837/day) while Platform A is an attractor (-935/day). Oakland/university stops are net generators, suggesting the corridor is a secondary hub where students board outbound.
| # | Name | Summary |
|---|---|---|
| 01 | System Trend | Tracks the overall PRT on-time performance trend from 2019 through 2025, including COVID impact and recovery. |
| 02 | Mode Comparison | Compares on-time performance across service modes (BUS, RAIL, INCLINE) and route types (local, limited, express, busway). |
| 03 | Route Ranking | Ranks routes by average OTP, trend direction, and volatility to identify best/worst performers and most (in)consistent routes. |
| 04 | Neighborhood Equity | Investigates whether on-time performance varies systematically by neighborhood and municipality. |
| 05 | Anomaly Investigation | Identifies and investigates sharp OTP drops that may indicate route restructuring, detours, or data quality issues. |
| 06 | Seasonal Patterns | Decomposes route-level OTP into trend, seasonal, and residual components to identify whether summer or winter months systematically affect performance. |
| 07 | Stop Count Vs Otp | Tests whether routes with more stops have worse on-time performance, using a scatter plot of stop count against average OTP with mode-based coloring. |
| 08 | Hotspot Map | Visualizes stop-level on-time performance on a geographic scatter plot to identify corridor-level bottlenecks and clusters of poor performance. |
| 09 | Incline Investigation | Audits the Monongahela Incline data across all database tables to determine why it appears in OTP data with zero/null values. |
| 10 | Frequency Vs Otp | Tests whether high-frequency routes have worse on-time performance, using weekday trip counts as a proxy for service frequency. |
| 11 | Directional Asymmetry | Investigates whether routes with a structural imbalance between inbound and outbound trip frequency have worse on-time performance. |
| 12 | Geographic Span | Computes the geographic span (max distance between any two stops) for each route and tests whether longer routes have worse on-time performance, disentangling route length from stop count. |
| 13 | Correlation Clustering | Computes pairwise OTP time-series correlations between all routes and uses hierarchical clustering to identify groups of routes whose performance rises and falls together. |
| 14 | Covid Recovery | Measures how far each route's OTP has recovered relative to its pre-COVID baseline and identifies route characteristics that predict faster or slower recovery. |
| 15 | Municipal Equity | Aggregates on-time performance by municipality and county to assess service reliability equity at a broader geographic level than neighborhood analysis (Analysis 04). |
| 16 | Transfer Hub Performance | Identifies high-connectivity stops (served by many routes) and tests whether passengers at transfer hubs experience worse OTP than those at low-connectivity stops. |
| 17 | Weekend Weekday Profile | Tests whether routes with different weekend-to-weekday service ratios show different OTP patterns, distinguishing commuter-oriented routes from all-day service routes. |
| 18 | Multivariate Model | Combines stop count, mode, bus subtype, geographic span, and service profile into a single OLS regression model to quantify relative importance and total explained variance. |
| 19 | Ridership Weighted Otp | Compute system OTP weighted by actual average daily ridership instead of scheduled trip frequency, to measure the average rider's experience. |
| 20 | Otp Ridership Causality | Test whether OTP declines predict subsequent ridership losses using lagged correlation and Granger causality tests. |
| 21 | Covid Ridership Recovery | Compare ridership recovery trajectories with OTP recovery trajectories post-COVID to identify whether ridership recovery degrades OTP. |
| 22 | Delay Burden | Estimate late rider-trips per route per month by combining ridership with OTP to identify where the most total human impact occurs. |
| 23 | Garage Performance | Compare OTP and ridership trends across PRT garages (Ross, Collier, East Liberty, West Mifflin) to surface operational differences. |
| 24 | Daytype Ridership Trends | Track how weekday, Saturday, and Sunday ridership patterns shifted post-COVID and whether weekend ridership share correlates with OTP. |
| 25 | Ridership Equity | Measure what share of total system ridership is carried by the lowest-OTP routes using Lorenz curves and Gini coefficients. |
| 26 | Ridership Multivariate | Add ridership as a predictor to the Analysis 18 OLS model to test whether it adds explanatory power beyond stop count, span, and mode. |
| 27 | Traffic Congestion | Tests whether PennDOT AADT traffic volume explains OTP variance beyond structural features |
| 28 | Weather Impact | Tests whether weather (precipitation, snow, temperature) explains OTP variance or the counterintuitive seasonal pattern from Analysis 06. |
| 29 | Service Change Impact | Do schedule changes (pick period transitions) correlate with OTP shifts? |
| 30 | Service Level Otp Longitudinal | Within-route panel: does changing trip frequency improve or degrade OTP? |
| 31 | Stop Consolidation | Identifies low-usage stops with nearby neighbors as candidates for consolidation, estimates per-route OTP gains from reduced stop counts. |
| 32 | Shelter Equity | Assesses whether bus shelters are equitably placed relative to stop-level ridership volume; identifies high-usage unsheltered stops. |
| 33 | Pandemic Ridership Geography | Maps the spatial pattern of stop-level ridership loss during the pandemic by distance zone, mode, and geography. |
| 34 | Ridership Concentration | Quantifies Pareto concentration of ridership across stops; tests whether route-level Gini correlates with OTP. |
| 35 | Boarding Alighting Flows | Analyzes net boarding-alighting flows by stop and direction to identify major trip generators vs attractors. |
PRT's system-wide boarding/alighting balance is nearly perfect (ratio 1.003), but individual stops show strong directional asymmetry. The top generators (net boardings) are outbound departure points on Smithfield St, 5th Ave, and Liberty Ave in downtown. The top attractors (net alightings) are inbound arrival points on Wood St, Liberty Ave at Gateway, and North Side Station. The directional data confirms a classic radial commuter pattern: inbound trips net +22,385 boardings vs outbound trips net -24,197 (i.e., people board going in and alight going out).
The boarding/alighting flow pattern is a direct fingerprint of Pittsburgh's commuter geography. The strong inbound-boarding / outbound-alighting asymmetry (+22K/-24K) confirms that PRT operates as a radial commuter network focused on downtown. The slight imbalance (outbound net is 1,800 higher than inbound net) likely reflects "Both"-direction stops that aggregate mixed flows.
The street-level generator/attractor split in downtown is operationally informative: Smithfield St outbound stops need boarding capacity (shelters, queuing space, real-time info), while Wood St inbound stops need alighting capacity (wide sidewalks, clear exits). This differs from a simple "downtown = destination" model and has implications for stop amenity design.
The presence of Oakland as a net generator is notable – it suggests the 5th Ave/Forbes corridor serves as a secondary hub where students and workers board to travel outbound, not just as a destination from downtown. This bidirectional flow may explain why 5th Ave routes face OTP challenges: high dwell time at stops that serve both directions heavily.
For service planning, the net flow data identifies where passenger demand is structurally asymmetric. Routes serving strong generators could potentially benefit from express or limited-stop variants in the outbound direction, while routes terminating at strong attractors could justify higher inbound frequency.
| # | Name | Summary |
|---|---|---|
| 01 | System Trend | Tracks the overall PRT on-time performance trend from 2019 through 2025, including COVID impact and recovery. |
| 02 | Mode Comparison | Compares on-time performance across service modes (BUS, RAIL, INCLINE) and route types (local, limited, express, busway). |
| 03 | Route Ranking | Ranks routes by average OTP, trend direction, and volatility to identify best/worst performers and most (in)consistent routes. |
| 04 | Neighborhood Equity | Investigates whether on-time performance varies systematically by neighborhood and municipality. |
| 05 | Anomaly Investigation | Identifies and investigates sharp OTP drops that may indicate route restructuring, detours, or data quality issues. |
| 06 | Seasonal Patterns | Decomposes route-level OTP into trend, seasonal, and residual components to identify whether summer or winter months systematically affect performance. |
| 07 | Stop Count Vs Otp | Tests whether routes with more stops have worse on-time performance, using a scatter plot of stop count against average OTP with mode-based coloring. |
| 08 | Hotspot Map | Visualizes stop-level on-time performance on a geographic scatter plot to identify corridor-level bottlenecks and clusters of poor performance. |
| 09 | Incline Investigation | Audits the Monongahela Incline data across all database tables to determine why it appears in OTP data with zero/null values. |
| 10 | Frequency Vs Otp | Tests whether high-frequency routes have worse on-time performance, using weekday trip counts as a proxy for service frequency. |
| 11 | Directional Asymmetry | Investigates whether routes with a structural imbalance between inbound and outbound trip frequency have worse on-time performance. |
| 12 | Geographic Span | Computes the geographic span (max distance between any two stops) for each route and tests whether longer routes have worse on-time performance, disentangling route length from stop count. |
| 13 | Correlation Clustering | Computes pairwise OTP time-series correlations between all routes and uses hierarchical clustering to identify groups of routes whose performance rises and falls together. |
| 14 | Covid Recovery | Measures how far each route's OTP has recovered relative to its pre-COVID baseline and identifies route characteristics that predict faster or slower recovery. |
| 15 | Municipal Equity | Aggregates on-time performance by municipality and county to assess service reliability equity at a broader geographic level than neighborhood analysis (Analysis 04). |
| 16 | Transfer Hub Performance | Identifies high-connectivity stops (served by many routes) and tests whether passengers at transfer hubs experience worse OTP than those at low-connectivity stops. |
| 17 | Weekend Weekday Profile | Tests whether routes with different weekend-to-weekday service ratios show different OTP patterns, distinguishing commuter-oriented routes from all-day service routes. |
| 18 | Multivariate Model | Combines stop count, mode, bus subtype, geographic span, and service profile into a single OLS regression model to quantify relative importance and total explained variance. |
| 19 | Ridership Weighted Otp | Compute system OTP weighted by actual average daily ridership instead of scheduled trip frequency, to measure the average rider's experience. |
| 20 | Otp Ridership Causality | Test whether OTP declines predict subsequent ridership losses using lagged correlation and Granger causality tests. |
| 21 | Covid Ridership Recovery | Compare ridership recovery trajectories with OTP recovery trajectories post-COVID to identify whether ridership recovery degrades OTP. |
| 22 | Delay Burden | Estimate late rider-trips per route per month by combining ridership with OTP to identify where the most total human impact occurs. |
| 23 | Garage Performance | Compare OTP and ridership trends across PRT garages (Ross, Collier, East Liberty, West Mifflin) to surface operational differences. |
| 24 | Daytype Ridership Trends | Track how weekday, Saturday, and Sunday ridership patterns shifted post-COVID and whether weekend ridership share correlates with OTP. |
| 25 | Ridership Equity | Measure what share of total system ridership is carried by the lowest-OTP routes using Lorenz curves and Gini coefficients. |
| 26 | Ridership Multivariate | Add ridership as a predictor to the Analysis 18 OLS model to test whether it adds explanatory power beyond stop count, span, and mode. |
| 27 | Traffic Congestion | Tests whether PennDOT AADT traffic volume explains OTP variance beyond structural features |
| 28 | Weather Impact | Tests whether weather (precipitation, snow, temperature) explains OTP variance or the counterintuitive seasonal pattern from Analysis 06. |
| 29 | Service Change Impact | Do schedule changes (pick period transitions) correlate with OTP shifts? |
| 30 | Service Level Otp Longitudinal | Within-route panel: does changing trip frequency improve or degrade OTP? |
| 31 | Stop Consolidation | Identifies low-usage stops with nearby neighbors as candidates for consolidation, estimates per-route OTP gains from reduced stop counts. |
| 32 | Shelter Equity | Assesses whether bus shelters are equitably placed relative to stop-level ridership volume; identifies high-usage unsheltered stops. |
| 33 | Pandemic Ridership Geography | Maps the spatial pattern of stop-level ridership loss during the pandemic by distance zone, mode, and geography. |
| 34 | Ridership Concentration | Quantifies Pareto concentration of ridership across stops; tests whether route-level Gini correlates with OTP. |
| 35 | Boarding Alighting Flows | Analyzes net boarding-alighting flows by stop and direction to identify major trip generators vs attractors. |
The multivariate model (Analysis 18) explains 47% of OTP variance using structural route characteristics (stop count, geographic span, mode). The remaining 53% reflects operational and environmental factors absent from this dataset. This document identifies the most valuable additional data sources, ordered by expected analytical impact.
Update (Feb 2026): Four items have been obtained and analyzed since initial writing. See "Obtained" section below for results.
These would directly address the largest gaps in the current analysis.
What: Timestamped vehicle arrivals at each stop, ideally with scheduled vs actual times.
Why: The single biggest limitation of this project is that OTP is measured at the route-month level. Every analysis that projects OTP onto stops or neighborhoods (Analyses 04, 08, 15, 16) commits an ecological fallacy – a route's average OTP is not uniform across its stops. AVL data would reveal where along each route delays accumulate, transforming descriptive findings into actionable diagnostics.
What it would enable:
Likely source: PRT's internal CAD/AVL system. May be available via FOIA or data sharing agreement. Some agencies publish this as part of GTFS-Realtime archives.
What: Archived GTFS static feeds for each service period, containing stop_times, trips, calendar, and shapes.
Why: The current route_stops table is a single snapshot applied across 7 years of OTP data. Service levels changed dramatically (COVID cuts, post-COVID restructuring). This creates a static-weights problem flagged in METHODOLOGY-ISSUES.md (Issues 1, 2) and limits the multivariate model to current-period features only.
What it would enable:
Likely source: Mobility Database or transitfeeds.com archive PRT's historical GTFS feeds. PRT may also maintain an internal archive.
What: Dates, locations, and affected routes for road construction, utility work, and planned detours.
Why: Analysis 05 found clusters of negative anomalies in late 2022 that may reflect system-wide disruption. Construction is a major source of OTP degradation but leaves no trace in the current dataset. A construction calendar would enable systematic attribution of anomalies.
What it would enable:
Likely source: PRT service alerts (archived GTFS-RT or website scrapes). City of Pittsburgh and PennDOT construction permit databases.
Useful for completeness but unlikely to change major conclusions.
What: PRT's internal documentation of how OTP is calculated – threshold (e.g., 0-5 min late), measurement points (all stops vs timepoints vs origin/destination), and data source (AVL, manual, GPS).
Why: DATA_DICTIONARY.md flags that the "on-time" definition is unspecified. Different thresholds and measurement points would produce different numbers. Understanding the methodology would improve interpretation of all 27 analyses.
Likely source: PRT performance standards documentation, board presentations, or FTA reporting guidelines.
What: Bus/rail vehicle assignments by route, including vehicle age and type.
Why: Older vehicles may break down more often, and vehicle capacity affects dwell time. This is a second-order effect unlikely to dominate, but could explain residual variance for specific routes.
Likely source: PRT fleet inventory (often published in capital plans or NTD reports).
What: Locations of transit signal priority (TSP), bus-only lanes, queue jumps, and other infrastructure investments.
Why: Analysis 02 showed that dedicated right-of-way is the strongest mode-level predictor. Granular infrastructure data would let us test whether TSP or bus lanes produce measurable OTP improvements at specific locations.
Likely source: PRT or City of Pittsburgh traffic engineering department. Some TSP locations are documented in regional transportation plans.
These items have been acquired and analyzed. Summarized here for reference.
Obtained: Route-level monthly average weekday ridership from PRT open data (Jan 2017 – Oct 2024), loaded into ridership_monthly table.
Result: Ridership does not add explanatory power to the multivariate model (Analysis 26: F=2.53, p=0.116, R2 change +1.5pp). High ridership does not independently degrade OTP – poor-performing routes happen to have high ridership because they are long, many-stop corridors. However, ridership enabled Analyses 19-25 (ridership-weighted OTP, delay burden, equity, causality, COVID recovery, day-type trends).
Obtained: PennDOT AADT (Annual Average Daily Traffic) for 2,923 Allegheny County road segments via ArcGIS REST API. Spatially joined to GTFS route shapes via KDTree; loaded into route_traffic table.
Result: AADT is not significant after structural controls (Analysis 27: F=0.011, p=0.92). Truck percentage is significant (p=0.006, +5pp R2), likely proxying for arterial road classification. The null result is attributed to AADT being a 24-hour annual average that does not capture peak-hour congestion. Time-of-day traffic speed data (e.g., INRIX) remains the strongest untested congestion variable.
Obtained: NOAA GHCND daily weather from Pittsburgh International Airport (station USW00094823) via NCEI Access Data Service v1, covering Jan 2019 – Dec 2025 (2,557 daily records). Aggregated to monthly and loaded into weather_monthly table. Fields: precipitation, snowfall, temperature (max/min), freeze days, hot days, wind speed.
Result: Weather shows moderate detrended correlations with system OTP (freeze_days r=+0.57, mean_tmin r=-0.57) but in the counterintuitive direction – cold months have better OTP. Weather is statistically interchangeable with month-of-year dummies (neither adds significantly beyond the other: F=0.92, p=0.48 and F=1.09, p=0.39). At the route-month level, weather explains only 4.5% of within-route OTP variation and is non-significant with cluster-robust SEs. The seasonal pattern reflects lower winter demand/congestion rather than a direct weather impediment.
Obtained: Garage assignments from the current_garage field in ridership data (4 garages: Ross, Collier, East Liberty, West Mifflin).
Result: Garage is significant after structural controls (Analysis 23: F=4.55, p=0.005, R2 increase from 0.31 to 0.41). Collier routes run +5.4pp above East Liberty after controls (p<0.001). West Mifflin's poor raw performance is explained by route structure.
| # | Data Source | Primary Gap Addressed | Expected Impact on R² | Availability |
|---|---|---|---|---|
| 1 | AVL stop-level arrivals | Ecological fallacy in stop/neighborhood analyses | High | FOIA or data agreement |
| 2 | Historical GTFS feeds | Static weights, schedule changes | Medium-High | Public archives |
| 3 | ~~Weather data~~ | ~~Seasonal/anomaly attribution~~ | ~~Medium~~ | Obtained (Analysis 28) |
| 4 | Construction/detour records | Anomaly attribution | Low-Medium | Service alerts |
| 5 | OTP definition docs | Interpretation of all analyses | Low (interpretive) | PRT documentation |
| 6 | Vehicle fleet data | Residual variance | Low | NTD or capital plans |
| 7 | Signal priority locations | Infrastructure impact | Low | Traffic engineering |